#!/usr/bin/env node
/**
 * 灵犀指引服务启动脚本
 * 功能：
 * 1. 检查环境配置
 * 2. 检查依赖安装
 * 3. 尝试启动服务
 * 4. 提供错误处理和调试信息
 */

const fs = require('fs');
const path = require('path');
const { execSync, exec } = require('child_process');

// 获取当前工作目录
const cwd = process.cwd();

// 打印启动信息
console.log('========================================');
console.log('         灵犀指引服务启动脚本          ');
console.log('========================================');
console.log(`当前工作目录: ${cwd}`);
console.log(`Node.js 版本: ${process.version}`);
console.log('========================================');

// 检查package.json是否存在
function checkPackageJson() {
  const packageJsonPath = path.join(cwd, 'package.json');
  if (!fs.existsSync(packageJsonPath)) {
    console.error('❌ 错误: 找不到 package.json 文件，请确保在正确的项目目录中');
    process.exit(1);
  }
  console.log('✅ 找到 package.json 文件');
  return require(packageJsonPath);
}

// 检查.env文件是否存在
function checkEnvFile() {
  const envPath = path.join(cwd, '.env');
  if (!fs.existsSync(envPath)) {
    console.warn('⚠️  警告: 找不到 .env 文件，请确保已配置环境变量');
    console.warn('   可以复制 .env.example 为 .env 并配置相关参数');
    return false;
  }
  console.log('✅ 找到 .env 文件');
  return true;
}

// 检查依赖是否安装
function checkDependencies() {
  const nodeModulesPath = path.join(cwd, 'node_modules');
  if (!fs.existsSync(nodeModulesPath)) {
    console.warn('⚠️  警告: 找不到 node_modules 目录，需要安装依赖');
    return false;
  }
  console.log('✅ node_modules 目录已存在');
  return true;
}

// 安装依赖
function installDependencies() {
  try {
    console.log('正在安装依赖...');
    execSync('npm install', { stdio: 'inherit' });
    console.log('✅ 依赖安装完成');
    return true;
  } catch (error) {
    console.error('❌ 依赖安装失败:', error.message);
    return false;
  }
}

// 启动开发服务器
function startDevServer() {
  console.log('========================================');
  console.log('启动开发服务器...');
  console.log('提示: 按 Ctrl+C 停止服务器');
  console.log('========================================');
  
  const serverProcess = exec('npm run dev', { stdio: 'inherit' });
  
  serverProcess.on('exit', (code) => {
    if (code !== 0) {
      console.error(`\n❌ 服务器退出，退出码: ${code}`);
      console.log('\n尝试直接运行启动文件...');
      startDirectly();
    }
  });
}

// 直接运行启动文件
function startDirectly() {
  try {
    console.log('正在直接运行 index.js...');
    // 设置DEBUG环境变量以获取更详细的错误信息
    const env = { ...process.env, DEBUG: '*' };
    const serverProcess = exec('node src/index.js', { stdio: 'inherit', env });
    
    serverProcess.on('exit', (code) => {
      if (code !== 0) {
        console.error(`\n❌ 服务器直接运行失败，退出码: ${code}`);
        console.log('\n========================================');
        console.log('故障排除建议:');
        console.log('1. 检查数据库连接配置是否正确');
        console.log('2. 确保端口未被占用');
        console.log('3. 查看日志文件获取详细错误信息');
        console.log('========================================');
      }
    });
  } catch (error) {
    console.error('❌ 直接运行失败:', error.message);
  }
}

// 主函数
function main() {
  try {
    // 检查项目文件
    const packageJson = checkPackageJson();
    checkEnvFile();
    
    // 检查并安装依赖
    if (!checkDependencies()) {
      if (!installDependencies()) {
        console.log('\n尝试继续启动...');
      }
    }
    
    // 启动服务器
    startDevServer();
    
  } catch (error) {
    console.error('❌ 启动脚本执行出错:', error.message);
    console.log('尝试直接启动服务器...');
    startDirectly();
  }
}

// 执行主函数
main();

// 处理退出信号
process.on('SIGINT', () => {
  console.log('\n收到中断信号，正在退出...');
  process.exit(0);
});